/*
 * Flashlib - QB9 common Flash library
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package com.qb9.flashlib.logs
{
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.net.XMLSocket;
	
	// TODO: Implement IDisposable
	
	/**
	 * Send log messages through a socket.
	 */
	public class SocketAppender implements IAppender
	{
		private var socket:XMLSocket;
		private var _error:Boolean = false;
		
		public function SocketAppender(ip:String, port:int)
		{
			socket = new XMLSocket();
			socket.addEventListener(Event.CONNECT, onConnect);
			socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			socket.connect(ip, port);
		}
		
		private function onConnect(event:Event):void {
            trace("connectHandler: " + event);
        }
        
        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioErrorHandler: " + event);
            if (event.type == "ioError")
            {
            	_error = true;
            }
        }

		/** @inheritDoc */
		public function append(msg:Array, level:int):void
		{
			try {
				if (!_error)
					socket.send(msg.join(" "));
			}catch(e:Error)
				{_error = true;
			}
		}
	}
}
